/*
 * 无限联动EasyLinkage 1.0
 * 1.页面加载调用初始化，指定第一个联动对象名；
 * 2.联动对象上面指定linkage设置被联动对象名称；
 * 3.联动对象上面的onchange事件添加EasyLinkage.change(this)；
 * 4.被联动对象的选项指定reference设置引用值，未指定的则不参与联动；
 */
EasyLinkage={
	/*无限联动缓存数据，数据格式：	
		[
		    {
		        linkage: 'b',//联动对象名称
		        value: '1.1',//联动对象值
		        references: [//联动内容
		            {
		                reference: '1',//引用值
		                value: '1.1',//联动值
		                text: '1.1'//联动文本
		            },
		            {
		                reference: '1',
		                value: '1.2',
		                text: '1.2'
		            }
		        ]
		    },
		    {
		        linkage: 'c',
		        value: '1.2',
		        references: [
		            {
		                reference: '1.1',
		                value: '1.1.1',
		                text: '1.1.1'
		            },
		            {
		                reference: '1.1',
		                value: '1.1.2',
		                text: '1.1.2'
		            }
		        ]
		    }
		]	
	*/
	  linkages:new Array(),//[{linkage:'b',value:'',references:[{reference:'1',value:'1.1',text:'1.1'},{reference:'1',value:'1.2',text:'1.2'}]}]
	/**
	 * 初始化联动
	 * @param start 第一个联动联动名称(多个联动，则依次列出)
	 * @return void
	 */		  
	  iniLinkage:function(start){
		//alert(document.all.length);
		for(var i=0;i<document.all.length;i++){
			var element=document.all(i);
			var tagName=element.tagName;
			var linkage=element.getAttribute("linkage");
			var reference=element.getAttribute("reference");
			if(linkage!=null||reference!=null){//
				//alert(tagName+":"+linkage+":"+reference+"");
				if(linkage!=null&&tagName=="SELECT"){//支持select联动
					var linkageIndex=this.getLinkageIndex(linkage);
					this.linkages[linkageIndex].value=document.all(linkage).value;
				}else if(linkage!=null&&tagName=="INPUT"){//支持input联动
					var linkageIndex=this.getLinkageIndex(linkage);
					this.linkages[linkageIndex].value=document.all(linkage).value;					
				}else if(reference!=null&&tagName=="OPTION"){//				
					var parentElement=element.parentNode;
					if(parentElement!=null){//
						var parentTagName=parentElement.tagName;
						var parentLinkage=parentElement.name;
						if(parentLinkage!=null&&parentTagName=="SELECT"){//
						    var linkageIndex=this.getLinkageIndex(parentLinkage);
							var references=this.linkages[linkageIndex].references;
							//alert(parentLinkage+":"+reference+":"+element.value+":"+element.text);
							references[references.length]={reference:reference,value:element.value,text:element.text};
						}else{

						}
					}
				}else{
					alert("未处理的多级联动标签类型【"+tagName+"】关联对象【"+linkage+"】关联值【"+reference+"】，请与系统管理员联系！");
				}
			}
		}
		for(var i=0;i<this.linkages.length;i++){
			//alert(this.linkages[i].linkage+":"+this.linkages[i].value+":"+this.linkages[i].references.length);
			var select=document.all(this.linkages[i].linkage);
			var options=select.options;
			for(var j=options.length-1;j>=0;j--){
				if(options[j].getAttribute("reference")!=null){//移除联动的选项
					options.remove(j);  
				}
			}
		}
		for(var i=0;i<arguments.length;i++){
			this.change(document.all(arguments[i]));
		}
		for(var i=0;i<this.linkages.length;i++){
			var select=document.all(this.linkages[i].linkage);
			select.value=this.linkages[i].value;//恢复初始值
			this.change(select);
		}		
	 },
	/**
	 * 获取联动所在的索引号
	 * @param linkage 联动名称
	 * @return int 索引号
	 */		 
	 getLinkageIndex:function(linkage){
		for(var i=0;i<this.linkages.length;i++){
			if(this.linkages[i].linkage==linkage){
				return i;
			}
		}
		this.linkages[this.linkages.length]={linkage:linkage,references:[]};
		return this.linkages.length-1;
	 },
	/**
	 * 清除联动内容
	 * @param linkage 联动名称
	 * @return void
	 */		 
	 clear:function(linkage){
			var select=document.all(linkage);
			var options=select.options;
			for(var j=options.length-1;j>=0;j--){
				if(options[j].getAttribute("reference")!=null){//移除联动的选项
					options.remove(j);  
				}
			}		
	 },
	/**
	 * 促发联动
	 * @param select 促发联动所在对象
	 * @return void
	 */		 
	 change:function(select){
		//alert(select.name+":"+select.value+":"+select.getAttribute("linkage"));
		var linkage=select.getAttribute("linkage");
		if(linkage!=null){
			var subselect=document.all(linkage);
			this.clear(linkage);
			var linkageIndex=this.getLinkageIndex(linkage);
			var references=this.linkages[linkageIndex].references;
			var options=document.all(linkage).options;
			//alert(linkageIndex+":"+references.length+":"+options.length);
			for(var i=0;i<references.length;i++){
				if(select.value==references[i].reference){
					//alert(references[i].text+":"+references[i].value);
					var option=new Option(references[i].text,references[i].value);
					option.setAttribute("reference",references[i].reference);//添加联动的选项
					options.add(option);
				}
			}
			this.change(subselect);
			//alert(options.length);
		}
	 }	
}